<?php
/**
 * Token激励模型测试服务
 * @App	
 * @Group 
 * @Action TokenExcitationTestService
 * @author lilei
 * @date 2018年10月31日
 *
 */
namespace app\common\service;
use app\common\library\CommonFun;

class TokenExcitationTestService extends TokenExcitationBaseService {
	
	//******************************收入期望值设置**************************************//
	
	/**
	 * 用户间差距比
	 */
	var $user_between_rate;
	
	/**
	 * 作者间差距比
	 */
	var $author_between_rate;
	
	/**
	 * 用户与作者差距比
	 */
	var $user_author_between_rate;
	
	//******************************常量设置**************************************//
	
	/**
	 * 平台内交易H矿占比
	 */
	var $platform_trans_token_rate;
	
	/**
	 * 用户注册获取的总H矿占比
	 */
	var $user_register_get_token_rate;
	
	/**
	 * 平台自持有H矿占比
	 */
	var $platform_own_token_rate;
	
	//******************************输入参数----基本参数**************************************//
	
	/**
	 * 一级被邀请用户占比
	 */
	var $user_invite_1_rate;
	
	/**
	 * 二级被邀请用户占比
	 */
	var $user_invite_2_rate;
	
	/**
	 * 三级被邀请用户占比
	 */
	var $user_invite_3_rate;
	
	/**
	 * 作者用户占比
	 */
	var $author_rate;
	
	//******************************输入参数----行为参数**************************************//
	
	/**
	 * 单个用户的平均浏览量
	 */
	var $brows_for_user_rate;
	
	/**
	 * 后续浏览数占总用户比
	 */
	var $follow_brows_for_total_user_rate;
	
	/**
	 * 被打赏文章后续浏览数占比
	 */
	var $tip_article_follow_visit_rate;
	
	/**
	 * 未被打赏文章后续浏览数占比
	 */
	var $no_tip_article_follow_visit_rate;
	
	/**
	 * 打赏H币数占总收入比例
	 */
	var $tip_coin_for_total_rate;
	
	/**
	 * 推送服务消费H币数占总收入比例
	 */
	var $alert_coin_for_total_rate;
	
	/**
	 * 其他H币消费数占总收入比例
	 */
	var $other_coin_for_total_rate;
	
	//******************************输入参数----调控参数**************************************//
	
	/**
	 * 单日获取H币上限比例
	 */
	var $daily_coin_limit_rate;
	
	/**
	 * 用户后续收益额度比例
	 */
	var $user_follow_bonus_rate;
	
	/**
	 * 作者被打赏奖励额度比例
	 */
	var $author_tip_bonus_rate;
	
	/**
	 * 作者未被打赏奖励额度
	 */
	var $author_no_tip_bonus_rate;
	
	/**
	 * 构造函数
	 * 
	 * @param array $init_data
	 *        	初始化数据
	 */
	public function __construct(array $init_data = []) {
		// 初始化属性赋值
		if ($init_data) {
			foreach ( $init_data as $k => $v ) {
				$this->{$k} = $v;
			}
		}
		// 设置所有bc数学函数的默认小数点保留位数
		bcscale(4);
		// 执行初始化函数
		$this->__init();
	}
	
	/**
	 * 设置数据对象的值
	 * @access public
	 * @param string $name 名称
	 * @param mixed $value 值
	 * @return void
	 */
	public function __set($name,$value) {
		$message = "属性{$name}不存在";
		CommonFun::make_exception($message, false);
	}
	
	/**
	 * 初始化函数
	 */
	public function __init() {
		// 用户注册获取的H矿总数
		$this->user_token =  bcmul($this->total_token, $this->user_register_get_token_rate);
		// 平台内交易H矿数
		$this->exchange_token = bcmul($this->total_token, $this->platform_trans_token_rate);
		// 平台自持有H矿数
		$this->own_token = bcmul($this->total_token, $this->platform_own_token_rate);
		// 总用户数
		$this->TotalUser();
		// 作者总数
		$this->total_author = bcmul($this->total_user, $this->author_rate);
		// 总文章数
		$this->TotalArticle();
		// 三级级用户数
		$this->total_user_invite_1 = bcmul($this->total_user, $this->user_invite_1_rate);
		$this->total_user_invite_2 = bcmul($this->total_user, $this->user_invite_2_rate);
		$this->total_user_invite_3 = bcmul($this->total_user, $this->user_invite_3_rate);
		// 浏览数
		$this->visit = $this->brows_for_user_rate;
		// 后续浏览数
		$this->follow_visit = bcmul($this->visit, $this->follow_brows_for_total_user_rate);
		
		// 被打赏文章后续浏览数
		if ( !is_null($this->tip_article_follow_visit_rate) ) {
			$this->tip_visit = bcmul($this->follow_visit, $this->tip_article_follow_visit_rate);
		}
		
		// 未被打赏文章后续浏览数
		if ( !is_null($this->no_tip_article_follow_visit_rate) ) {
			$this->no_tip_visit = bcmul($this->follow_visit, $this->no_tip_article_follow_visit_rate);
		}
		
		// 单日获取H币上限---->单日获取额度上限
		if ( !is_null( $this->daily_coin_limit_rate ) ) {
			$this->daily_coin_limit = bcmul($this->bonus, $this->daily_coin_limit_rate);
		}
		
		// 用户后续收益额度
		if ( !is_null($this->user_follow_bonus_rate) ) {
			$this->follow_bonus = bcmul($this->bonus, $this->user_follow_bonus_rate);
		}
		
		// 作者单次激励行为奖励额度----被打赏文章单次浏览收益
		if ( !is_null($this->author_tip_bonus_rate) ) {
			$this->bonus1 = bcmul($this->bonus, $this->author_tip_bonus_rate);
		}
		
		// 作者单次激励行为奖励额度----未被打赏文章单次浏览收益
		if ( !is_null($this->author_no_tip_bonus_rate) ) {
			$this->bonus2 = bcmul($this->bonus, $this->author_no_tip_bonus_rate);
		}
		
		// 打赏H币数
		if ( !is_null($this->tip_coin_for_total_rate) ) {
			$vb = bcmul ( $this->visit, $this->bonus );
			$ff = bcmul ( $this->follow_visit, $this->follow_bonus );
			$vbff = bcadd ( $vb, $ff );
			$this->tip = bcmul($vbff, $this->tip_coin_for_total_rate);
		}
		
		// 推送服务消费H币数
		if ( !is_null($this->alert_coin_for_total_rate) ) {
			$vb = bcmul ( $this->visit, $this->bonus );
			$ff = bcmul ( $this->follow_visit, $this->follow_bonus );
			$vbff = bcadd ( $vb, $ff );
			$this->alert = bcmul($vbff, $this->alert_coin_for_total_rate);
		}
		
		// 其他H币消费数
		if ( !is_null($this->other_coin_for_total_rate) ) {
			$vb = bcmul ( $this->visit, $this->bonus );
			$ff = bcmul ( $this->follow_visit, $this->follow_bonus );
			$vbff = bcadd ( $vb, $ff );
			$this->other = bcmul($vbff, $this->other_coin_for_total_rate);
		}
		
		// 通过用户单日产生H币数公式, 导出邀请用户产生总上缴H币数
		$this->InviteCoinImportByDailyUserCoin();
		// 通过用户单日产生H币数公式, 反向计算被邀请用户产生总上缴H币数 [测试]
		//$this->InviteCoinByDailyUserCoin();
		
		// 用户单日产生H币数
		$this->DailyUserCoin();
		// 单个作者单日产生H币数
		$this->DailyAuthorCoin();
		// 单个用户产生总H币数
		$this->UserTotalCoin();
		// 所有用户产生总H币数
		$this->TotalUserCoin();
		// 单个作者产生总H币数
		$this->AuthorTotalCoin();
		// 所有作者产生总H币数
		$this->TotalAuthorCoin();
		// H币产生总数量
		$this->TotalCoin();
		
		// 成本总额(分红池)[每日]
		// $this->Fund();
		// 被邀请用户产生总H币数
		$this->TotalInviteCoin();
		// 被邀请用户总H币数
		$this->TotalUserCoinInvite();
		// 总H币产生数
		$this->TotalProduceCoin();
		
		
// 		if ( bcmul($this->total_produce_coin, $this->token_price_param) == $this->total_coin ) {
// 			$this->ReleaseTokenInit();
// 		}else {
// 			// H矿总释放数 导出公式 基于 sold_token
// 			$this->ReleaseTokenDiv();
// 		}
		
		//var_export($this->release_token);
		
		// H矿总释放数 一次方根导出公式 [测试]
		//$this->ReleaseTokenBcsqrt();
		
		// H矿价格
		$this->TokenPrice();
		
		// 平台内H矿卖出数
		$this->SoldToken();
		
		$this->ReleaseToken();
		
		// 成本总额
		$this->fund = $this->fund ?: $this->Fund();
		
		// 用户单日产生H矿数
		$this->DailyUserToken();
		// 所有用户持有总H矿数
		$this->TotalUserToken();
		
		// 单个作者单日获取H矿数
		$this->DailyAuthorToken();
		// 所有作者持有总H矿数
		$this->TotalAuthorToken();
		
		$this->UserTotalToken();
		$this->AuthorTotalToken();
		
		// 用户单日获取分红
		$this->DailyUserBonus();
		$this->UserTotalBonus();
		// 单个作者单日获取分红
		$this->DailyAuthorBonus();
		$this->AuthorTotalBonus();
		// 所有用户获取总分红
		$this->TotalUserBonus();
		// 所有作者获取总分红
		$this->TotalAuthorBonus();
		// 被邀请用户总H币数
		$this->TotalUserCoinInvite();
		// H币兑换总数量
		$this->TotalExchangeCoin();
		// H币消费总数量
		$this->TotalConsumeCoin();
		// H币主激励产生数
		$this->TotalMainCoin();
		// H币总投资收益数
		$this->TotalFollowCoin();
	}
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
}